/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Forms;

import BusinessEntity.BE_EstadoRequerimiento;
import BusinessEntity.BE_Personal;
import BusinessEntity.BE_Requerimiento;
import BusinessEntity.BE_Usuario;
import BusinessLogic.BL_EstadoRequerimiento;
import BusinessLogic.BL_Requerimiento;
import Comun.Constantes;
import Comun.Funciones_Comunes;
import Comun.GUI;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author richard.saldana
 */
public class Frm_BandejaTarea extends javax.swing.JInternalFrame {

    //padre
    private JFrame frmPadre;
    //tabla
    private DefaultTableModel objModelo;
    //Personal
    private BE_Personal objBEPersonal;
    //usuario
    private BE_Usuario objBEUsuario;
    //lista requerimientos
    private ArrayList<BE_Requerimiento> aobjBERequerimiento;
    //lista combo Estados
    private ArrayList<BE_EstadoRequerimiento> aobjBEEstadoRequerimiento;
    //requerimiento busqueda
    private BE_Requerimiento objRequerimientoBusqueda;
    /**
     * Creates new form Frm_BandejaTarea
     */
    public Frm_BandejaTarea(JFrame frmVentana) throws InstantiationException, IllegalAccessException, SQLException {
        initComponents();
        setDefaultCloseOperation(0);
        this.frmPadre = frmVentana;
        this.objModelo = (DefaultTableModel) this.tblRequerimientos.getModel();
        this.objBEPersonal =((Frm_principal) this.frmPadre).getObjBEPersonal();
        this.objBEUsuario = ((Frm_principal) this.frmPadre).getObjBEUsuario();
        
        habilitarOpciones(this.objBEPersonal);
        inicializar();
         //para centrar las columnas de la tabla
        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
        tcr.setHorizontalAlignment(SwingConstants.CENTER);
        this.tblRequerimientos.getColumnModel().getColumn(0).setCellRenderer(tcr);
        this.tblRequerimientos.getColumnModel().getColumn(1).setCellRenderer(tcr);
        this.tblRequerimientos.getColumnModel().getColumn(3).setCellRenderer(tcr);
        cargarListaRequerimientos(this.objBEPersonal);
    }

    public void inicializar () throws InstantiationException, IllegalAccessException, SQLException{
        //combo estado
        setAobjBEEstadoRequerimiento(BL_EstadoRequerimiento.obtenerInstancia().obtenerEstados());
        if(this.aobjBEEstadoRequerimiento != null){
            cmbEstado.removeAllItems();
            this.cmbEstado.addItem("<Todos>");
            for (int i = 0; i < aobjBEEstadoRequerimiento.size(); i++) {
                this.cmbEstado.addItem(aobjBEEstadoRequerimiento.get(i));
                
            }
        }
    }
    public void cargarListaRequerimientos( BE_Personal objBEPersonal) throws InstantiationException, IllegalAccessException, SQLException {
        
        this.aobjBERequerimiento =BL_Requerimiento.obtenerInstancia().obtenerRequerimientos(objBEPersonal);
        llenarGrilla(getAobjBERequerimiento());
        
        
    }
    
        public void llenarGrilla(ArrayList<BE_Requerimiento> lstRequerimientos) throws InstantiationException, IllegalAccessException, SQLException {

        if (lstRequerimientos != null) {
            
            for (BE_Requerimiento objBERequerimiento : lstRequerimientos) {
     
                BE_EstadoRequerimiento  objBEEstado = new BE_EstadoRequerimiento();
                objBEEstado = BL_EstadoRequerimiento.obtenerInstancia().obtenerEstadoRequerimiento(objBERequerimiento.getObjBEEstadoRequerimiento().getIdEstado());

                objModelo.addRow(new Object[]{
                          objBERequerimiento.getIdRequerimiento(),
                          objBERequerimiento.getStrNombre(),
                          objBERequerimiento.getStrDescripcion(),
                          objBEEstado.getStrNombre()
                        });
            }
        }
       this.tblRequerimientos.updateUI();
    }
   
    public void limpiarGrilla() {
       this.objModelo.getDataVector().removeAllElements();
    }
    
    public void habilitarOpciones( BE_Personal objBEPersonal) throws InstantiationException, IllegalAccessException, SQLException {
        
      if(objBEPersonal.getObjBERol().getIdRol() == Constantes.AnalistaCertificacion){
          this.btnAgregar.setEnabled(true);
          this.btnModificar.setEnabled(true);
          this.btnEliminar.setEnabled(true);
          this.jpDetalle.setBorder(BorderFactory.createTitledBorder("Bandeja de Requerimientos"));
          
      }else if(objBEPersonal.getObjBERol().getIdRol() == Constantes.JefeTester){
          this.jpDetalle.setBorder(BorderFactory.createTitledBorder("Bandeja de Tareas"));
          this.btnEjecutar.setText("Asignar");
          this.btnModificar.setEnabled(true);
      }
        
        
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jpDetalle = new javax.swing.JPanel();
        btnEliminar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnAgregar = new javax.swing.JButton();
        btnEjecutar = new javax.swing.JButton();
        btnDevolver = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblRequerimientos = new javax.swing.JTable();
        jpCabecera = new javax.swing.JPanel();
        btnRegresar = new javax.swing.JButton();
        jpFiltros = new javax.swing.JPanel();
        lblNombre = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        txtCodigo = new javax.swing.JTextField();
        lblCodigo = new javax.swing.JLabel();
        lblEstado = new javax.swing.JLabel();
        cmbEstado = new javax.swing.JComboBox();
        btnBuscar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();

        jpDetalle.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        btnEliminar.setText("Eliminar");
        btnEliminar.setActionCommand("btn_eliminar");
        btnEliminar.setEnabled(false);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });

        btnModificar.setText("Modificar");
        btnModificar.setActionCommand("btn_modificar");
        btnModificar.setEnabled(false);
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });

        btnAgregar.setText("Agregar");
        btnAgregar.setActionCommand("btn_agregar");
        btnAgregar.setEnabled(false);
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        btnEjecutar.setText("Ejecutar");
        btnEjecutar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEjecutarActionPerformed(evt);
            }
        });

        btnDevolver.setText("Devolver");
        btnDevolver.setEnabled(false);

        tblRequerimientos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Nombre", "Descripción", "Estado"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tblRequerimientos);

        javax.swing.GroupLayout jpDetalleLayout = new javax.swing.GroupLayout(jpDetalle);
        jpDetalle.setLayout(jpDetalleLayout);
        jpDetalleLayout.setHorizontalGroup(
            jpDetalleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpDetalleLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpDetalleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1)
                    .addGroup(jpDetalleLayout.createSequentialGroup()
                        .addComponent(btnDevolver, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEjecutar, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnModificar, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jpDetalleLayout.setVerticalGroup(
            jpDetalleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpDetalleLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jpDetalleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(btnAgregar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnEjecutar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnDevolver, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnModificar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        btnRegresar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/home_regresar.png"))); // NOI18N
        btnRegresar.setToolTipText("Regresar");
        btnRegresar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegresarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jpCabeceraLayout = new javax.swing.GroupLayout(jpCabecera);
        jpCabecera.setLayout(jpCabeceraLayout);
        jpCabeceraLayout.setHorizontalGroup(
            jpCabeceraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpCabeceraLayout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(btnRegresar, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        jpCabeceraLayout.setVerticalGroup(
            jpCabeceraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(btnRegresar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        jpFiltros.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos de Búsqueda"));

        lblNombre.setText("Nombre :");

        txtNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreKeyTyped(evt);
            }
        });

        txtCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtCodigoActionPerformed(evt);
            }
        });
        txtCodigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCodigoKeyTyped(evt);
            }
        });

        lblCodigo.setText("Código :");

        lblEstado.setText("Estado:");

        btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/fife/plaf/Office2003/find.gif"))); // NOI18N
        btnBuscar.setText("Buscar");
        btnBuscar.setToolTipText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed1(evt);
            }
        });

        btnLimpiar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/fife/plaf/Office2003/undo.gif"))); // NOI18N
        btnLimpiar.setText("Limpiar");
        btnLimpiar.setToolTipText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed1(evt);
            }
        });

        javax.swing.GroupLayout jpFiltrosLayout = new javax.swing.GroupLayout(jpFiltros);
        jpFiltros.setLayout(jpFiltrosLayout);
        jpFiltrosLayout.setHorizontalGroup(
            jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpFiltrosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jpFiltrosLayout.createSequentialGroup()
                        .addComponent(lblCodigo)
                        .addGap(16, 16, 16))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpFiltrosLayout.createSequentialGroup()
                        .addComponent(lblNombre)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
                .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txtNombre)
                    .addGroup(jpFiltrosLayout.createSequentialGroup()
                        .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnBuscar))
                        .addGap(18, 18, 18)
                        .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(btnLimpiar)
                            .addGroup(jpFiltrosLayout.createSequentialGroup()
                                .addComponent(lblEstado)
                                .addGap(18, 18, 18)
                                .addComponent(cmbEstado, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap(191, Short.MAX_VALUE))
        );
        jpFiltrosLayout.setVerticalGroup(
            jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpFiltrosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jpFiltrosLayout.createSequentialGroup()
                        .addGap(26, 26, 26)
                        .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblCodigo)))
                    .addGroup(jpFiltrosLayout.createSequentialGroup()
                        .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblNombre)
                            .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(cmbEstado, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblEstado))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jpFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnLimpiar)
                    .addComponent(btnBuscar)))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jpCabecera, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jpFiltros, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jpDetalle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jpCabecera, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jpFiltros, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jpDetalle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(30, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        Frm_Requerimiento objFrm_Requerimiento = null;
        int intOpcion = 0;
        int intCodigoRequerimientoNuevo = Constantes.CodigoRequerimientoNuevo;
        try {
            intOpcion = Constantes.OpcionNuevo;//nuevo Requerimiento
            objFrm_Requerimiento = new Frm_Requerimiento(this, intCodigoRequerimientoNuevo, intOpcion);
        } catch (InstantiationException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        }
        Frm_principal.jdpContenedor.add(objFrm_Requerimiento);
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension ventana = objFrm_Requerimiento.getSize();
        objFrm_Requerimiento.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 5);
        objFrm_Requerimiento.toFront();
        objFrm_Requerimiento.setVisible(true);
        this.limpiarGrilla();
        this.setVisible(false);
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void btnRegresarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegresarActionPerformed
        ((Frm_principal) (this.frmPadre)).habilitarMenu();
        this.dispose();
    }//GEN-LAST:event_btnRegresarActionPerformed

    private void btnEjecutarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEjecutarActionPerformed
       
       int intRowCount = tblRequerimientos.getSelectedRowCount();
       int intOpcion = 0;
       
       if(intRowCount > 1){
           Comun.GUI.msjAlerta("Solo se debe seleccionar un registro");
       }else if(intRowCount == 0){
           Comun.GUI.msjAlerta("Debe seleccionar un registro");
       }else{
           int intRow = tblRequerimientos.getSelectedRow();
           int intEstadoRequerimiento = this.aobjBERequerimiento.get(intRow).getObjBEEstadoRequerimiento().getIdEstado();
           int intFlagAsignacion = this.aobjBERequerimiento.get(intRow).getIntFlagAsignacion();
           
                if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.AnalistaCertificacion){
                    if(intEstadoRequerimiento == Constantes.EstadoIngresado){
                       int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());
                       try {
                           BL_Requerimiento.obtenerInstancia().ejecutarRequerimiento(intCodigoRequerimiento);
                       } catch (InstantiationException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       } catch (IllegalAccessException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       } catch (SQLException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       }
                       
                       Comun.GUI.msjAlerta("El requerimiento se proceso de forma adecuada");
                       
                        this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                        limpiarGrilla();

                         try {
                             cargarListaRequerimientos(getObjBEPersonal());

                         } catch (InstantiationException ex) {
                             Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                         } catch (IllegalAccessException ex) {
                             Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                         } catch (SQLException ex) {
                             Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                         }
                    } else{
                      Comun.GUI.msjAlerta("El Requerimiento solo se puede ejecutar\nSi tiene el estado Ingresado");  
                    }
                }
                
                if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.JefeTester){
                    if(intEstadoRequerimiento == Constantes.EstadoEnEstimacion && intFlagAsignacion == Constantes.FlagNoAsignado ){
                        intOpcion = Constantes.OpcionNuevo; //ASIGNAR ANALISTA
                        Frm_AsignarRequerimiento objFrm_AsignarRequerimiento = null;
                        int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());
                        
                        try {
                            objFrm_AsignarRequerimiento = new Frm_AsignarRequerimiento(this, intCodigoRequerimiento, intOpcion);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (SQLException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        }

                        Frm_principal.jdpContenedor.add(objFrm_AsignarRequerimiento);
                        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
                        Dimension ventana = objFrm_AsignarRequerimiento.getSize();
                        objFrm_AsignarRequerimiento.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 5);
                        objFrm_AsignarRequerimiento.toFront();
                        objFrm_AsignarRequerimiento.setVisible(true);
                        this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                        this.limpiarGrilla();
                        this.setVisible(false); 
                    
                    }
                }
                if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.Tester){
                   if(intEstadoRequerimiento == Constantes.EstadoEnEstimacion){
                       intOpcion = Constantes.OpcionNuevo;
                       Frm_Estimacion objFrm_Estimacion = null;
                       int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());
                        try {                        
                            objFrm_Estimacion = new Frm_Estimacion(this, intCodigoRequerimiento, intOpcion);
                 
                        } catch (InstantiationException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (SQLException ex) {
                            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                        }
            
                       
                       Frm_principal.jdpContenedor.add(objFrm_Estimacion);
                        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
                        Dimension ventana = objFrm_Estimacion.getSize();
                        objFrm_Estimacion.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 14);
                        objFrm_Estimacion.toFront();
                        objFrm_Estimacion.setVisible(true);
                        this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                        this.limpiarGrilla();
                        this.setVisible(false); 
                   } 
                }

       
       }

    }//GEN-LAST:event_btnEjecutarActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed

       int intRowCount = tblRequerimientos.getSelectedRowCount();
       int intOpcion = 0;
       
       if(intRowCount > 1){
           Comun.GUI.msjAlerta("Solo se debe seleccionar un registro");
       }else if(intRowCount == 0){
           Comun.GUI.msjAlerta("Debe seleccionar un registro");
       }else{
           int intRow = tblRequerimientos.getSelectedRow();
           int intEstadoRequerimiento = this.aobjBERequerimiento.get(intRow).getObjBEEstadoRequerimiento().getIdEstado();
           int intFlagAsignacion = this.aobjBERequerimiento.get(intRow).getIntFlagAsignacion();
           
                if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.AnalistaCertificacion){
                    if(intEstadoRequerimiento == Constantes.EstadoIngresado){
                        intOpcion = Constantes.OpcionModificar; //MODIFICACION
                       Frm_Requerimiento objFrm_Requerimiento = null;
                       int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());

                       try {
                           objFrm_Requerimiento = new Frm_Requerimiento(this, intCodigoRequerimiento, intOpcion);
                       } catch (InstantiationException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       } catch (IllegalAccessException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       } catch (SQLException ex) {
                           Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                       }

                        Frm_principal.jdpContenedor.add(objFrm_Requerimiento);
                        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
                        Dimension ventana = objFrm_Requerimiento.getSize();
                        objFrm_Requerimiento.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 5);
                        objFrm_Requerimiento.toFront();
                        objFrm_Requerimiento.setVisible(true);
                        this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                        this.limpiarGrilla();
                        this.setVisible(false); 
                    }else{
                        Comun.GUI.msjAlerta("El Requerimiento solo se puede Modicicar\nSi tiene el estado Ingresado");  
                    }
                 
                       
 

                }
                
                if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.JefeTester){
                     if(intFlagAsignacion == Constantes.FlagAsignado){
                         this.setVisible(false);
                         if (Comun.GUI.msjPreguntaSiNo("¿Seguro que desea Modificar el Requerimiento Asignado?" )) {
                            intOpcion = Constantes.OpcionModificar; //MODIFICACION
                            Frm_AsignarRequerimiento objFrm_AsignarRequerimiento = null;
                            int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());

                            try {
                                objFrm_AsignarRequerimiento = new Frm_AsignarRequerimiento(this, intCodigoRequerimiento, intOpcion);
                            } catch (InstantiationException ex) {
                                Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (SQLException ex) {
                                Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                            }

                            Frm_principal.jdpContenedor.add(objFrm_AsignarRequerimiento);
                            Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
                            Dimension ventana = objFrm_AsignarRequerimiento.getSize();
                            objFrm_AsignarRequerimiento.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 5);
                            objFrm_AsignarRequerimiento.toFront();
                            objFrm_AsignarRequerimiento.setVisible(true);
                            this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                            this.limpiarGrilla();
                            this.setVisible(false); 
                         }
                         else{
                            this.setVisible(true);
                         }
                    }
       
                }

       
       }

    }//GEN-LAST:event_btnModificarActionPerformed

    private void txtNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreKeyTyped
        if (!Funciones_Comunes.validaTamannoJText(evt, txtNombre, 30)) {
            evt.consume();
        }
    }//GEN-LAST:event_txtNombreKeyTyped

    private void txtCodigoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoKeyTyped
        if (!(Funciones_Comunes.validaCadenaNumericaEntera(evt) && Funciones_Comunes.validaTamannoJText(evt, txtCodigo, 4))) {
            evt.consume();
        }
    }//GEN-LAST:event_txtCodigoKeyTyped

    private void btnBuscarActionPerformed1(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed1
         limpiarGrilla();
         boolean bolTamahoNombre = (Funciones_Comunes.esVacio(txtNombre.getText().trim()));
         boolean bolCodigo = (Funciones_Comunes.esVacio(txtCodigo.getText().trim()));
         
         BE_Requerimiento objBE_Requerimiento = new BE_Requerimiento();
         if(!bolTamahoNombre){     
             objBE_Requerimiento.setStrNombre(txtNombre.getText().trim());    
         } 
         if(!bolCodigo){
             objBE_Requerimiento.setIdRequerimiento(Integer.parseInt(txtCodigo.getText().trim()));
         }
         if(!cmbEstado.getSelectedItem().toString().equals("<Todos>")){
             BE_EstadoRequerimiento objBE_EstadoRequerimiento = (BE_EstadoRequerimiento) this.cmbEstado.getSelectedItem();
             objBE_Requerimiento.setObjBEEstadoRequerimiento(objBE_EstadoRequerimiento);
         }
         
         setObjRequerimientoBusqueda(objBE_Requerimiento);
        try {
            setAobjBERequerimiento(BL_Requerimiento.obtenerInstancia().obtenerRequerimientosBusqueda(this.objBEPersonal, objBE_Requerimiento));
              if (getAobjBERequerimiento().size() == 0) {
                    GUI.msjAlerta("No se encontraron resultados en la busqueda");
                    limpiar();
                } else {
                    this.llenarGrilla(getAobjBERequerimiento());
//                    limpiar();
                }
         
        } catch (InstantiationException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        }

         
    }//GEN-LAST:event_btnBuscarActionPerformed1

    public void limpiar() throws InstantiationException, IllegalAccessException, SQLException{
        txtNombre.setText("");
        txtCodigo.setText("");
        inicializar();
        
    }
    private void btnLimpiarActionPerformed1(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed1
        try {
            limpiar();
            // TODO add your handling code here:
        } catch (InstantiationException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_btnLimpiarActionPerformed1

    private void txtCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCodigoActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtCodigoActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed

       int intRowCount = tblRequerimientos.getSelectedRowCount();
       
       if(intRowCount > 1){
           Comun.GUI.msjAlerta("Solo se debe seleccionar un registro");
       }else if(intRowCount == 0){
           Comun.GUI.msjAlerta("Debe seleccionar un registro");
       }else{
           int intRow = tblRequerimientos.getSelectedRow();
           
           if(this.objBEPersonal.getObjBERol().getIdRol() == Constantes.AnalistaCertificacion){
               
               this.setVisible(false);
                if (Comun.GUI.msjPreguntaSiNo("¿Seguro que desea Eliminar el Requerimiento?" )) {
                                int intCodigoRequerimiento = Integer.parseInt(tblRequerimientos.getValueAt(intRow, 0).toString());
               
               try {
                   BL_Requerimiento.obtenerInstancia().eliminarRequerimiento(intCodigoRequerimiento);
               } catch (InstantiationException ex) {
                   Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
               } catch (IllegalAccessException ex) {
                   Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
               } catch (SQLException ex) {
                   Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
               }
               
               Comun.GUI.msjAlerta("El requerimiento ha sido Eliminado");
                       
                this.tblRequerimientos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                limpiarGrilla();

                 try {
                     cargarListaRequerimientos(getObjBEPersonal());

                 } catch (InstantiationException ex) {
                     Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                 } catch (IllegalAccessException ex) {
                     Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                 } catch (SQLException ex) {
                     Logger.getLogger(Frm_BandejaTarea.class.getName()).log(Level.SEVERE, null, ex);
                 }  
                  this.setVisible(true);
                }
                else{
                    this.setVisible(true);
                }   
               

           }
       
       }
    }//GEN-LAST:event_btnEliminarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnDevolver;
    private javax.swing.JButton btnEjecutar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRegresar;
    private javax.swing.JComboBox cmbEstado;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel jpCabecera;
    private javax.swing.JPanel jpDetalle;
    private javax.swing.JPanel jpFiltros;
    private javax.swing.JLabel lblCodigo;
    private javax.swing.JLabel lblEstado;
    private javax.swing.JLabel lblNombre;
    public transient javax.swing.JTable tblRequerimientos;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the objBEUsuario
     */
    public BE_Usuario getObjBEUsuario() {
        return objBEUsuario;
    }

    /**
     * @param objBEUsuario the objBEUsuario to set
     */
    public void setObjBEUsuario(BE_Usuario objBEUsuario) {
        this.objBEUsuario = objBEUsuario;
    }

    /**
     * @return the aobjBERequerimiento
     */
    public ArrayList<BE_Requerimiento> getAobjBERequerimiento() {
        return aobjBERequerimiento;
    }

    /**
     * @param aobjBERequerimiento the aobjBERequerimiento to set
     */
    public void setAobjBERequerimiento(ArrayList<BE_Requerimiento> aobjBERequerimiento) {
        this.aobjBERequerimiento = aobjBERequerimiento;
    }

    /**
     * @return the objBEPersonal
     */
    public BE_Personal getObjBEPersonal() {
        return objBEPersonal;
    }

    /**
     * @param objBEPersonal the objBEPersonal to set
     */
    public void setObjBEPersonal(BE_Personal objBEPersonal) {
        this.objBEPersonal = objBEPersonal;
    }

    /**
     * @return the aobjBEEstadoRequerimiento
     */
    public ArrayList<BE_EstadoRequerimiento> getAobjBEEstadoRequerimiento() {
        return aobjBEEstadoRequerimiento;
    }

    /**
     * @param aobjBEEstadoRequerimiento the aobjBEEstadoRequerimiento to set
     */
    public void setAobjBEEstadoRequerimiento(ArrayList<BE_EstadoRequerimiento> aobjBEEstadoRequerimiento) {
        this.aobjBEEstadoRequerimiento = aobjBEEstadoRequerimiento;
    }

    /**
     * @return the objRequerimientoBusqueda
     */
    public BE_Requerimiento getObjRequerimientoBusqueda() {
        return objRequerimientoBusqueda;
    }

    /**
     * @param objRequerimientoBusqueda the objRequerimientoBusqueda to set
     */
    public void setObjRequerimientoBusqueda(BE_Requerimiento objRequerimientoBusqueda) {
        this.objRequerimientoBusqueda = objRequerimientoBusqueda;
    }
    
}
